# coding:utf-8
# 王一舟
# conftest.py


# 文件名必须这个conftest，不能改。
# 钩子函数都是框架自带的。pytest的钩子函数
import time
import pytest
import logging
import os
import pathlib  #用来指定路径的包
# import allure
# import json
# from core.globalContext import g_Context#导入全局变量类


#用于控制台打印日志
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    # 通过 out = yield 定义了一个生成器。在生成器中，res = out.get_result() 获取了测试结果对象。
    out = yield  #  类似于return，但是它返回之后执行完毕会自动回来
    res = out.get_result()
    #  res.when == "call"：表示正在运行调用测试函数的阶段。
    if res.when == "call":
        logging.info(f"用例ID：{res.nodeid}")
        logging.info(f"测试结果：{res.outcome}")
        logging.info(f"故障表示：{res.longrepr}")
        logging.info(f"异常：{call.excinfo}")
        logging.info(f"用例耗时：{res.duration}")
        logging.info("**************************************")

#打印日志,用于在项目根目录下创建Log文件夹,然后在其中按日期创建文件夹,归类每天的不同时间段的日志
@pytest.fixture(scope="session", autouse=True)
def manage_logs(request):
    """Set log file name same as test name"""
    date = time.localtime()  # 获取时间实例对象
    file_path = pathlib.Path(__file__).parents[0].resolve() / 'Log' #当前目录下加一个Log文件夹用于存放以日期排序的日志
    # 获取当前日期-字符串
    Date = "-".join([str(date.tm_year), str(date.tm_mon), str(date.tm_mday)])
    # 获取当前时间-字符串

    # dateDir = os.path.join(file_path)  #
    if not os.path.exists(file_path):  # 如果当前目录下没有Log文件夹,
        os.mkdir(file_path)  # 那么就在当前目录下创建一个Log文件夹 注意! 目录只能一层一层创建!即当前已存在目录下只能创建1个新的

    dateDir = os.path.join(file_path, Date)  # 拼接当前目录/Log/日期
    if not os.path.exists(dateDir):  # 如果不存在该目录
        os.mkdir(dateDir)  # 按日期切割创建文件夹


    now = time.strftime("%H-%M-%S") #%Y-%m-%d 当前时间字符串
    log_name = 'logdata_' + now + '.logs' #日志名称
    request.config.pluginmanager.get_plugin("logging-plugin").set_log_path(dateDir+"\\"+log_name)
    #前半段是固定的,后半段set_log_path就是日志存放路径,自己改



# #登录拿token
# @pytest.fixture(scope="session",autouse=True)
# def Login_Fixture():
#     from extend.keywords import KeyWords
#     key = KeyWords()  # 实例化封装的关键字
#
#     with allure.step("登录账号,获取token"):
#         print("---------登录接口获取token---------")
#         url = "http://shop-xo.hctestedu.com/?s=api/user/login"
#         param = {
#             "application": "app",
#             "application_client_type": "weixin"
#         }
#         body = {"accounts": "hami", "pwd": "123456", "type": "username"}
#         headers = {"content-Type": "application/json"}
#         # 将请求体的字典序列化成json字符串用data传参
#         body = json.dumps(body)
#         key.request_post(url=url, params=param, data=body, headers=headers)
#         # http://www.atoolbox.net/Tool.php?Id=792 借助在线工具进行调试
#         # 重点,无论如何,jsonath返回的数据都是一个列表格式
#         msg_res = key.ex_jsonData(EXVALUE="$..msg",VARNAME="msg_results")
#         print('登录状态是:', msg_res)
#         assert msg_res == "登录成功", f"返回的msg是:{msg_res}"
#         # 提取token
#         token =key.ex_jsonData(EXVALUE="$..token",VARNAME="token")
#         print("提取的token是:", token)
#         return token